wayland: Respect keymap repeat information
authorMatthias Clasen <mclasen@redhat.com>
Sat, 23 Mar 2013 21:09:38 +0000 (17:09 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 23 Mar 2013 21:29:28 +0000 (17:29 -0400)
xkb has a function to tell us whether a key should be repeated
or not. Lets use that information.

gdk/wayland/gdkdevice-wayland.c
gdk/wayland/gdkprivate-wayland.h

index f485269d9003bb615bf8a610de794a50d074bd6a..91056aeaf09dfc107a74ba7043c9758b95e48a70 100644 (file)
@@ -963,12 +963,14 @@ deliver_key_event(GdkWaylandDeviceData *device,
 {
   GdkEvent *event;
   struct xkb_state *xkb_state;
+  struct xkb_keymap *xkb_keymap;
   GdkKeymap *keymap;
   xkb_keysym_t sym;
   guint delay, interval;
 
   keymap = device->keymap;
   xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
+  xkb_keymap = _gdk_wayland_keymap_get_xkb_keymap (keymap);
 
   sym = xkb_state_key_get_one_sym (xkb_state, key);
 
@@ -996,6 +998,9 @@ deliver_key_event(GdkWaylandDeviceData *device,
                        event->key.hardware_keycode, event->key.keyval,
                        event->key.string, event->key.state));
 
+  if (!xkb_keymap_key_repeats (xkb_keymap, key))
+    return FALSE;
+
   if (!get_key_repeat (device, &delay, &interval))
     return FALSE;
 
index c083396e35c231f6dd6e93ccbd1c3b269ea84937..0b7f5b570fe9c1965d5d89a8b34c84303edb62f4 100644 (file)
@@ -52,6 +52,7 @@ GdkKeymap *_gdk_wayland_keymap_new (void);
 GdkKeymap *_gdk_wayland_keymap_new_from_fd (uint32_t format,
                                             uint32_t fd, uint32_t size);
 struct xkb_state *_gdk_wayland_keymap_get_xkb_state (GdkKeymap *keymap);
+struct xkb_keymap *_gdk_wayland_keymap_get_xkb_keymap (GdkKeymap *keymap);
 
 void       _gdk_wayland_display_finalize_cursors (GdkWaylandDisplay *display);
 void       _gdk_wayland_display_update_cursors (GdkWaylandDisplay      *display,